package com.wnxy.sddfp.sms.service.impl;

import cn.hutool.core.util.RandomUtil;
import com.wnxy.sddfp.common.constant.RedisConstant;
import com.wnxy.sddfp.sms.config.SmsTemplate;
import com.wnxy.sddfp.sms.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.time.Duration;

@Service
public class SmsServiceImpl implements SmsService {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private SmsTemplate smsTemplate;

    /**
     * BoundValueOperations 应用：对同一个key多次进行操作，可以使用它简化代码
     * @param phone
     */
    @Override
    public void sendPhoneCode(String phone) {
        // 先从redis中获取验证码，如果没有过期直接返回；
        BoundValueOperations<String, String> ops =
                redisTemplate.boundValueOps(RedisConstant.SMS_PREFIX + phone);
        String redisCode = ops.get(); // 不用再指定key
        if (!StringUtils.isEmpty(redisCode)) {
            return;
        }

        // 发短信-生成短信验证码
        String randomCode = RandomUtil.randomNumbers(4);
        // 发短信-调用阿里云短信接口
        smsTemplate.sendSms(phone, randomCode);

        // 验证码存储到redis中： SMS:18665591000 1256
        ops.set(randomCode, Duration.ofMinutes(5)); // 不用再指定key
    }
}